// 工具函数：格式化距离
function formatDistance(meter) {
  meter = meter.toFixed(1)
  if (meter < 0 || meter == null) return '距离未知';
  if (meter >= 1000) return (meter / 1000).toFixed(1) + 'km';
  return meter + 'm';
}

function searchNearby(keyword, callback) {
  wx.getLocation({
    type: 'gcj02',
    success(locationRes) {
      const { latitude, longitude } = locationRes;
      // 在你要用的时候
      getApp().initqqmap().then(qqmapsdk => {
        // 确保 sdk 已经初始化完成
        qqmapsdk.search({
          keyword,
          location: `${latitude},${longitude}`,
          page_size: 20,
          success: searchRes => {
            const pois = searchRes.data;
            if (!pois.length) {
              callback([]);
              return;
            }

            const resultWithDistance = pois.map(poi => {
              const dist = getDistance(latitude, longitude, poi.location.lat, poi.location.lng);
              return {
                ...poi,
                distance: dist,
                distanceText: formatDistance(dist)
              };
            });
            callback(resultWithDistance);
          },
          fail: err => {
            console.error('搜索失败：', err);
            callback([]);
          }
        });
      }).catch(err => {
        console.error('地图SDK初始化失败：', err);
      });


    },
    fail: err => {
      console.error('定位失败：', err);
      callback([]);
    }
  });
}


/**
 * 根据经纬度计算两点之间的距离（单位：米）
 * @param {number} lat1 起点纬度
 * @param {number} lon1 起点经度
 * @param {number} lat2 终点纬度
 * @param {number} lon2 终点经度
 * @return {number} 返回两点之间的距离（单位：米）
 */
function getDistance(lat1, lon1, lat2, lon2) {
  const R = 6371e3; // 地球半径，单位米
  const φ1 = lat1 * Math.PI / 180; // 纬度转换为弧度
  const φ2 = lat2 * Math.PI / 180;
  const Δφ = (lat2 - lat1) * Math.PI / 180; // 纬度差值
  const Δλ = (lon2 - lon1) * Math.PI / 180; // 经度差值

  const a = Math.sin(Δφ / 2) * Math.sin(Δφ / 2) +
    Math.cos(φ1) * Math.cos(φ2) *
    Math.sin(Δλ / 2) * Math.sin(Δλ / 2);

  const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));



  return R * c; // 返回距离，单位：米
}

module.exports = {
  searchNearby
};